home *** CD-ROM | disk | FTP | other *** search
/ Micromanía 92 / CDMM92_1.ISO / SOF 2 SDK / sof2sdk-101.msi / _92D6AC311BB48EBA344BBABC89DA6AB0 / _5604331AD0F845A8BD04EE1598AA154A < prev    next >
Encoding:
Text File  |  2002-06-05  |  1.7 KB  |  78 lines

  1. // Copyright (C) 2001-2002 Raven Software.
  2. //
  3. // cg_miscents.h --
  4.  
  5. #include "cg_local.h"
  6.  
  7. #define MAX_MISC_ENTS    4000
  8.  
  9. static refEntity_t    *MiscEnts = 0;
  10. static float        *Radius = 0;
  11. static int            NumMiscEnts = 0;
  12.  
  13. void CG_MiscEnt(void)
  14. {
  15.     int            modelIndex;
  16.     refEntity_t    *RefEnt;
  17.     TCGMiscEnt    *data = (TCGMiscEnt *)cg.sharedBuffer;
  18.     vec3_t        mins, maxs;
  19.     float        *radius;
  20.  
  21.     if (NumMiscEnts >= MAX_MISC_ENTS)
  22.     {
  23.         return;
  24.     }
  25.  
  26.     if (!MiscEnts)
  27.     {
  28.         MiscEnts = (refEntity_t *)trap_VM_LocalAlloc(sizeof(refEntity_t)*MAX_MISC_ENTS);
  29.         Radius = (float *)trap_VM_LocalAlloc(sizeof(float)*MAX_MISC_ENTS);
  30.     }
  31.     
  32.     radius = &Radius[NumMiscEnts];
  33.     RefEnt = &MiscEnts[NumMiscEnts++];
  34.  
  35.     modelIndex = trap_R_RegisterModel(data->mModel);
  36.     if (modelIndex == 0)
  37.     {
  38.         Com_Error(ERR_DROP, "client_model has invalid model definition");
  39.         return;
  40.     }
  41.  
  42.     memset(RefEnt, 0, sizeof(refEntity_t));
  43.     RefEnt->reType = RT_MODEL;
  44.     RefEnt->hModel = modelIndex;
  45.     RefEnt->frame = 0;
  46.     trap_R_ModelBounds(modelIndex, mins, maxs);
  47.     VectorCopy(data->mScale, RefEnt->modelScale);
  48.     VectorCopy(data->mOrigin, RefEnt->origin);
  49.  
  50.     VectorScaleVector(mins, data->mScale, mins);
  51.     VectorScaleVector(maxs, data->mScale, maxs);
  52.     *radius = Distance(mins, maxs);
  53.  
  54.     AnglesToAxis( data->mAngles, RefEnt->axis );
  55.     CG_ScaleModelAxis(RefEnt);
  56. }
  57.  
  58. void CG_DrawMiscEnts(void)
  59. {
  60.     int            i;
  61.     refEntity_t    *RefEnt;
  62.     float        *radius;
  63.     vec3_t        difference;
  64.  
  65.     RefEnt = MiscEnts;
  66.     radius = Radius;
  67.     for(i=0;i<NumMiscEnts;i++)
  68.     {
  69.         VectorSubtract(RefEnt->origin, cg.refdef.vieworg, difference);
  70.         if (VectorLength(difference)-(*radius) <= RMG_distancecull.value)
  71.         {
  72.             trap_R_AddRefEntityToScene(RefEnt);
  73.         }
  74.         RefEnt++;
  75.         radius++;
  76.     }
  77. }
  78.